package com.wmz.aiagent.rag;

import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.rag.retrieval.search.DocumentRetriever;
import org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.filter.Filter;
import org.springframework.ai.vectorstore.filter.FilterExpressionBuilder;

/**
 * 创建自定义的检索增强顾问
 */
@Slf4j
public class LoveAppRagCustomAdvisorFactory {
    /**
     * 创建一个定制化的检索增强顾问 (RetrievalAugmentationAdvisor)，
     * 它能够从给定的 vectorStore 中根据 status 筛选文档，并检索出与查询最相关的前 3 个文档。
     * @param vectorStore 向量存储
     * @param status   用于过滤的状态字段
     * @return
     */
    public static Advisor createLoveAppRagCustomAdvisor(VectorStore vectorStore, String status) {
        // 构建过滤表达式
        Filter.Expression expression = new FilterExpressionBuilder()
                .eq("status", status)
                .build();
        // 构建文档检索器
        DocumentRetriever documentRetriever = VectorStoreDocumentRetriever.builder()
                .vectorStore(vectorStore)
                .filterExpression(expression) // 过滤条件
                .similarityThreshold(0.5) // 相似度阈值
                .topK(3) // 返回文档数量
                .build();
        // 构建检索增强顾问并返回
        return RetrievalAugmentationAdvisor.builder()
                .documentRetriever(documentRetriever)
                .build();
    }
}
